package br.com.bancoeXtreme.tratadoresxml;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;


import br.com.bancoeXtreme.transacoes.cliente.TransacaoClienteExtrato;
import br.com.bancoeXtreme.transacoes.servidor.TransacaoServidorExtratoPorPeriodo;

public class SAXParserClienteExtratoPorPeriodo extends DefaultHandler{
	private TransacaoServidorExtratoPorPeriodo transacaoServidorExtratoPorPeriodo = new TransacaoServidorExtratoPorPeriodo();
	private String tagAtual;
	private boolean apareceuTipo = false;
	private int transacaoClienteAtual = -1;
	
	public TransacaoServidorExtratoPorPeriodo parseTransacaoExtratoPorPeriodo(File arquivoXML){
		ArrayList<TransacaoClienteExtrato> extrato = new ArrayList<TransacaoClienteExtrato>();
		transacaoServidorExtratoPorPeriodo.setExtrato(extrato);
		SAXParserFactory spf = SAXParserFactory.newInstance();
		SAXParser parser = null;
		try {
			parser = spf.newSAXParser();
			parser.parse(arquivoXML,this);
		} catch (ParserConfigurationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SAXException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return transacaoServidorExtratoPorPeriodo;
	}
	
	public void startElement(String uri, String localName, String tag, Attributes atributos ){
		this.tagAtual = tag;
	}
	
	public void characters(char ch[], int start, int lenght) {
		String tmp = new String(ch,start,lenght);
		if (tagAtual == "aceita"){
			transacaoServidorExtratoPorPeriodo.setAceita(tmp.trim());
			tagAtual = "";
		} else {
			if (tagAtual == "data"){
				transacaoServidorExtratoPorPeriodo.getExtrato().get(transacaoClienteAtual).setData(new Date(tmp.trim()));
				tagAtual = "";
			} else {
				if (tagAtual == "transacaoCliente"){
					transacaoServidorExtratoPorPeriodo.getExtrato().add(new TransacaoClienteExtrato());
					transacaoClienteAtual = transacaoServidorExtratoPorPeriodo.getExtrato().size() - 1;
					tagAtual = "";
				} else {
					if (tagAtual == "tipo"){
						if (apareceuTipo){
							apareceuTipo = true;
						}
					} else {
						if (tagAtual == "valor") {
							transacaoServidorExtratoPorPeriodo.getExtrato().get(transacaoClienteAtual).setValor(Float.parseFloat(tmp.trim()));
						} else {
							if (tagAtual == "mensagem"){
								transacaoServidorExtratoPorPeriodo.setMensagem(tmp.trim());
								tagAtual = "";
							}
						}
					}
				}
			}
		}
	}
}
